import time  # 导入time模块，用于实现重试机制中的延时功能。
import redis  # 导入redis模块，用于连接和操作Redis数据库。
from flask import Flask  # 从flask模块中导入Flask类，用于创建Flask应用。

# 创建一个Flask应用实例
app = Flask(__name__)

# 创建一个Redis连接实例，连接到名为'redis'的主机上的6379端口
# 这里假设Redis服务运行在名为'redis'的Docker容器中，并且暴露了6379端口
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    """
    这个函数用于获取和增加页面访问次数。
    如果连接Redis时发生连接错误，会重试最多5次，每次延时0.5秒。
    """
    retries = 5  # 设置重试次数为5次
    while True:
        try:
            # 使用Redis的INCR命令增加名为'hits'的计数器，并返回递增后的值
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            # 如果发生连接错误，减少重试次数并延时0.5秒后重试
            if retries == 0:
                raise exc  # 如果重试次数用完，抛出异常
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    """
    这个视图函数处理根路径('/')的请求。
    它调用get_hit_count函数获取访问计数，并返回包含访问计数的响应。
    """
    count = get_hit_count()  # 获取当前访问计数
    return '你已经见到我 {} 次了.\n'.format(count)  # 返回包含访问计数的响应

# 如果这个脚本被直接运行，启动Flask应用
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)  # 使Flask应用监听所有主机地址的5000端口
